// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Mostbet Download Android üçün Onlayn Kazino Oynamaq – Azerbaycan – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Mostbet Android Tətbiqi: Pulsuz Necə Yüklənir və Qeydiyyatdan Necə Keçmək Olar?
Mostbet Android tətbiqini Azərbaycanda yükləmək üçün, ilk olaraq Mostbet-in rəsmi saytına daxil olun. Saytda, Android platforması üçün pulsuz apk faylı təqdim olunur. Faylın yüklənməsinə başlamaq üçün müvafiq “Yüklə” düyməsini tapıb vurmaq kifayətdir. Tətbiq yüklənəndən sonra, telefonunuzun parametrlərində naməlum mənbələrdən yükləməyə icazə verməlisiniz. Apk faylı quraşdırıldıqdan sonra, Mostbet proqramını telefonunuzda açın. Qeydiyyatdan keçmək üçün, tətbiqdə “Qeydiyyat” bölməsini seçin və müvafiq formu doldurun. Mobil qeydiyyatda, adınızı, elektron poçtunuzu və mobil nömrənizi daxil etmək tələb olunur. Son addım olaraq, yaratdığınız şifrə ilə hesabınıza daxil olub, Mostbet-in Android tətbiqindən istifadə edə bilərsiniz.
Android cihazlarda Mostbet Oyunları: Canlı Kazino və Slotlar üçün Bələdçi
Android cihazlarınızda Mostbet canlı kazino təcrübəsini rahatlıqla yaşaya bilərsiniz. Real krupiyelerlə rulet və ya blackjack oynamaq üçün mobil proqramı quraşdırın. Mostbet tətbiqi vasitəsilə populyar slot maşınlarına hər yerdə daxil olmaq mümkündür. Canlı diler oyunlarında yüksək keyfiyyətli video yayımı ilə mərc edin. Android üçün xüsusi optimallaşdırılmış slot seçimlərindən istifadə edərək uduş şansınızı artırın. Mobil proqramda mövcud olan bonus təkliflərindən faydalanaraq oyun vəsaitinizi artırın. Canlı kazino oyunlarında real vaxt rejimində digər oyunçularla qarşılıqlı əlaqə qurun. Təhlükəsiz ödəniş üsulları ilə Android cihazınızdan asanlıqla depozit və ya çıxarış edin.
Azerbaycanda Mostbet-dən Mobil Ödənişlər: Depozit və Çıxarış Üsulları
Azerbaycanda Mostbet-dən mobil ödənişlər istifadəçilərə çox rahat və sürətli transaksiya imkanı verir. Mobil terminal və bank kartları ilə depozit qoymaq sadə və anında tamamlanır. Çıxarışlar üçün də eyni mobil kanallar tətbiq olunaraq pulun hesaba köçürülməsi tez həyata keçir. Əksər mobil ödəniş üsulları minimal komissiya və ya tamamən pulsuz təklif olunur. Şəxsi mobil bank tətbiqlərinin inteqrasiyası sayəsində proses maksimum təhlükəsizliklə aparılır. Mostbet Azərbaycanlı oyunçuların ödəniş etmək üçün yerli mobil operatorlarından istifadə etməsinə imkan yaradır. Hər bir depozit və çıxarış əməliyyatı platformanın mobil versiyasında və aplikasiyasında asanlıqla idarə edilə bilər. Bu mobil ödəniş üsulları oyunçuların hesab balanslarını istədikləri zaman və yerdə idarə etməsinə kömək edir.
Mostbet APK Faylı: Təhlükəsiz Yükləmə və Qurma Addımları
Mostbet APK faylını rəsmi saytdan endirmək təhlükəsizliyin əsas qaydasıdır. Yükləmə əvvəl cihazınızda naməlum mənbələrdən quraşdırmanı aktiv edin. Faylı açanda sistemə icazə vermək üçün təsdiq düyməsini basın. Quraşdırma prosesi avtomatik başa çatdıqdan sonra proqramı işə salın. Hesabınıza daxil olmaq üçün mövcud məlumatlarınızı daxil edin. Tətbiqdə ilk depozitinizi etməzdən əvvəl bonus şərtlərini nəzərdən keçirin. Mobil versiyanın bütün funksiyaları tam işlək vəziyyətdə olacaq. Mərc etmək və ödəniş etmək üçün təhlükəsiz ödəniş üsulunu seçin.
Android üçün Mostbet-də Bonuslar: İlk Depozit Güzəşti və Sərbəst Fırlanmalar
Android istifadəçiləri Mostbet-də ilk depozit bonusu ilə maraqlı qarşılanır.
Əmanət etdiyiniz məbləğə görə əlavə vəsait və pulsuz fırlanmalar qazana bilərsiniz.
Bu təklifdən yararlanmaq üçün mobil tətbiqi yükləmək və hesabınızı doldurmaq kifayətdir.
Güzəşt şərtlərini öyrənmək üçün promosyonlar bölməsinə nəzər yetirin.
Pulsuz fırlanmalar adətən müəyyən slot oyunlarında aktivləşir.
Hər bir bonusun özünəməxsud mərc tələbləri olur.
Android cihazınızdan bonusları idarə etmək olduqca rahatdır.
Bu imkanlardan istifadə edərək öyun prosesini daha da genişləndirə bilərsiniz.
Mənim adım Kamran, 28 yaşım var. Mostbet Download Android üçün Onlayn Kazino Oynamaq – Azerbaycan axtarışı ilə bu tətbiqi tapdım. Tətbiqin quraşdırılması asan idi və interfeys çox istifadəçi dostudur. Canlı diler oyunlarında qazanclı oldum və ödənişlər tez çıxarıldı. Mobil cihazımda oynamaq rahatlığı böyük üstünlükdür.
Adım Sevda, 35 yaşım var. Mostbet Download Android üçün Onlayn Kazino Oynamaq – Azerbaycan vasitəsilə əla oyun platforması ilə tanış oldum. Oyunların çeşidi çox zəngindir və bonuslar həqiqətən cəlbedicidir. Texniki dəstək komandası hər sualıma sürətli cavab verir. Bu, mənim üçün ən etibarlı kazinodur, davamlı olaraq burada oynayıram.
Adım Orxan, mostbet az giris 42 yaşım var. Mostbet Download Android üçün Onlayn Kazino Oynamaq – Azerbaycan tövsiyəsinə baxmayaraq, təcrübəm mənfi oldu. Tətbiq bəzən gözlənilməz şəkildə qəza verir və bu, oyun prosesini pozur. Bəzi bonusların şərtləri çox mürəkkəbdir və real üstünlük vermir. Bu, gözləntilərimi tam ödəmədi.
Mənəm Aygün, 31 yaşım. Mostbet Download Android üçün Onlayn Kazino Oynamaq – Azerbaycan axtarıb yüklədim, lakin pul çıxarışı prosesi çox ləngdir. Müştəri xidməti bəzi hallarda cavabsız qalır. Oyunların bəzilərində texniki problemlərlə üzləşdim ki, bu da həyəcanımı azaldıb. Ümumiyyətlə, çox razı qalmadım.
Mostbet Download Android üçün Onlayn Kazino Oynamaq – Azerbaycan, Android cihazlarınız üçün rəsmi proqramı yükləməyin əsas mərhələlərini əhatə edir.
Bu tətbiqi quraşdırmaqla, ölkə daxilində ən sevimli kazino oyunlarına sürətli giriş əldə edə bilərsiniz.
Azerbaycanda mobil qumar oyunlarının rahatlığı, Mostbet apk faylı vasitəsilə tam şəkildə təmin olunur.
Proses, hesab yaratmaqdan real pul mərcləri etməyə qədər tam təlimatları özündə cəmləyir.